这次的代码更恐怖,一个字 – 长,二个字 – 够长,三个子 – 真是长,哈哈,不过你仔细研究一下还挺有意思的:)
using System;enum MoveRequestType {FastForward, SlowForward, Reverse};class MoveRequestEventArgs : EventArgs{ private MoveRequestType request; public MoveRequestEventArgs(MoveRequestType initRequest) : base() { request = initRequest; } public MoveRequestType Request { get { return request; } }}class Car{ private int distance; private int speedParam; private string name; public Car(int initSpeedParam, string initName) { speedParam = initSpeedParam; distance = 0; name = initName; } public void Subscribe(GameController controller) { controller.OnMoveRequest += new GameController.MoveRequest(MoveRequestHandler); } public void Unsubscribe(GameController controller) { controller.OnMoveRequest -= new GameController.MoveRequest(MoveRequestHandler); } public void MoveRequestHandler(object sender, MoveRequestEventArgs e) { switch (e.Request) { case MoveRequestType.SlowForward: distance += speedParam; Console.WriteLine("Car name: " + name + " Moving slowly. Distance: " + distance); break; case MoveRequestType.FastForward: distance += speedParam * 2; Console.WriteLine("Car name: " + name + " Moving fast. Distance: " + distance); break; case MoveRequestType.Reverse: distance -= 5; Console.WriteLine("Car name: " + name + " Reversing. Distance: " + distance); break; } } public override string ToString() { return name; } }class GameController{ public delegate void MoveRequest(object sender, MoveRequestEventArgs e); public event MoveRequest OnMoveRequest; Car[] gameCars = new Car[10]; string carName; int speedParam = 0; int carCounter = 0; int carNumber = 0; public void Run() { string answer; Console.WriteLine("Please select from the following menu: "); Console.WriteLine("A)dd new car"); Console.WriteLine("C)ar. Subscribe to events"); Console.WriteLine("U)nsubscribe from events"); Console.WriteLine("L)ist cars in current game"); Console.WriteLine("F)ast forward"); Console.WriteLine("S)low forward"); Console.WriteLine("R)everse"); Console.WriteLine("T)erminate"); do { Console.WriteLine("Select new option:"); answer = Console.ReadLine().ToUpper(); switch(answer) { case "A": Console.Write("Enter name of the new car: "); carName = Console.ReadLine(); Console.Write("Enter car speed parameter of the new car: "); speedParam = Convert.ToInt32(Console.ReadLine()); gameCars[carCounter] = new Car(speedParam, carName); carCounter++; break; case "C": Console.Write("Enter array index of car you want to subscribe to events: "); carNumber = Convert.ToInt32(Console.ReadLine()); gameCars[carNumber].Subscribe(this); break; case "U": Console.Write("Enter array index of car you want to unsubscribe from events: "); carNumber = Convert.ToInt32(Console.ReadLine()); gameCars[carNumber].Unsubscribe(this); break; case "L": for(int i=0; i |